草庐IT

Android TalkBack 和 fragment 堆栈

全部标签

c - 堆栈溢出发生前剩余堆栈的大小

在Linux上,使用C,假设我有一个动态确定的n命名我必须存储在数组中的元素数量(intmy_array[n])只是在很短的时间内,比如一个函数调用,被调用函数只使用很少的内存(大约一百字节)。大部分n很少,大约十分之一。但有时n可能很大,多达1000或1'000'000。如何计算,我的堆栈是否可以容纳n*o+p个字节而不溢出?基本上:我的堆栈中还剩下多少字节? 最佳答案 的确,checkingavailablestack问题给出了很好的答案。但更务实的答案是:不要在调用堆栈上分配大数据。在您的情况下,您可以以不同方式处理n时的情况

c - Linux 中的可执行堆栈示例(i386 架构)

我发现当我们使用nestedfunctions时,GCC需要trampolinecode的可执行堆栈.但是,以下代码在使用gcc编译时不会显示可执行堆栈。(我用execstack来验证堆栈是否可执行)#include#includeintmain(){intadd(inta,intb){returna+b;}returnadd(2,3);}为什么这不会产生可执行堆栈?如果它不应该,那么有人可以举例说明确实提供可执行堆栈的代码结构吗? 最佳答案 如果嵌套函数根本不依赖于其“父”的堆栈,那么它只是一个普通函数-嵌套是语法(和作用域)糖。

c - Linux 中的可执行堆栈示例(i386 架构)

我发现当我们使用nestedfunctions时,GCC需要trampolinecode的可执行堆栈.但是,以下代码在使用gcc编译时不会显示可执行堆栈。(我用execstack来验证堆栈是否可执行)#include#includeintmain(){intadd(inta,intb){returna+b;}returnadd(2,3);}为什么这不会产生可执行堆栈?如果它不应该,那么有人可以举例说明确实提供可执行堆栈的代码结构吗? 最佳答案 如果嵌套函数根本不依赖于其“父”的堆栈,那么它只是一个普通函数-嵌套是语法(和作用域)糖。

c - 堆栈旁边的线程有什么用

在Linux进程中,每个线程都有自己的堆栈。除此之外,每个线程还有什么是本地的。我已经阅读了文件分配表等内容......有人可以向我提供特定于线程的内容列表以及它们在内存中的排列方式。其次,我注意到当我为一个线程分配一个堆栈时(见下面的代码),线程函数中第一个变量的地址在我分配的堆栈地址(stackAddr)。我认为这是因为栈顶是分配的堆栈内存的结束地址,因为局部变量地址和分配的堆栈的值的差异大约是堆栈的大小(STACKSIZE)。换句话说,它看起来像是从底部向顶部生长。pthread_attr_init(&attr[tid]);stackAddr=malloc(STACKSIZE);

c - 堆栈旁边的线程有什么用

在Linux进程中,每个线程都有自己的堆栈。除此之外,每个线程还有什么是本地的。我已经阅读了文件分配表等内容......有人可以向我提供特定于线程的内容列表以及它们在内存中的排列方式。其次,我注意到当我为一个线程分配一个堆栈时(见下面的代码),线程函数中第一个变量的地址在我分配的堆栈地址(stackAddr)。我认为这是因为栈顶是分配的堆栈内存的结束地址,因为局部变量地址和分配的堆栈的值的差异大约是堆栈的大小(STACKSIZE)。换句话说,它看起来像是从底部向顶部生长。pthread_attr_init(&attr[tid]);stackAddr=malloc(STACKSIZE);

linux - 每个进程是否存在内核堆栈?

每个用户空间进程是否存在内核堆栈和用户空间堆栈?如果两个堆栈都存在,那么每个用户空间进程应该有2个堆栈指针,对吗? 最佳答案 在Linux中,每个任务(用户空间或内核线程)都有一个8kb或4kb的内核堆栈,具体取决于内核配置。确实有单独的堆栈指针,但是,在任何给定时间,CPU中只有一个;如果用户空间代码正在运行,用于异常或中断的内核堆栈指针由任务状态段指定,如果内核代码正在运行,则用户堆栈指针保存在位于内核堆栈的上下文结构中。 关于linux-每个进程是否存在内核堆栈?,我们在Stack

linux - 每个进程是否存在内核堆栈?

每个用户空间进程是否存在内核堆栈和用户空间堆栈?如果两个堆栈都存在,那么每个用户空间进程应该有2个堆栈指针,对吗? 最佳答案 在Linux中,每个任务(用户空间或内核线程)都有一个8kb或4kb的内核堆栈,具体取决于内核配置。确实有单独的堆栈指针,但是,在任何给定时间,CPU中只有一个;如果用户空间代码正在运行,用于异常或中断的内核堆栈指针由任务状态段指定,如果内核代码正在运行,则用户堆栈指针保存在位于内核堆栈的上下文结构中。 关于linux-每个进程是否存在内核堆栈?,我们在Stack

linux - 在 Unix 系统上自动获取堆栈跟踪

在Unix系统上有哪些自动获取堆栈跟踪的方法?我的意思不是仅仅获取核心文件或与GDB交互附加,而是拥有一个SIGSEGV处理程序将回溯转储到文本文件。以下可选功能的奖励积分:在崩溃时收集额外信息(例如配置文件)。通过电子邮件将崩溃信息包发送给开发人员。能够将其添加到dlopened共享库中不需要GUI 最佳答案 仅供引用,建议的解决方案(在信号处理程序中使用backtrace_symbols)有被破坏的危险。不要使用它-是的,backtrace和backtrace_symbols会生成回溯并将其转换为符号名称,但是:backtrac

linux - 在 Unix 系统上自动获取堆栈跟踪

在Unix系统上有哪些自动获取堆栈跟踪的方法?我的意思不是仅仅获取核心文件或与GDB交互附加,而是拥有一个SIGSEGV处理程序将回溯转储到文本文件。以下可选功能的奖励积分:在崩溃时收集额外信息(例如配置文件)。通过电子邮件将崩溃信息包发送给开发人员。能够将其添加到dlopened共享库中不需要GUI 最佳答案 仅供引用,建议的解决方案(在信号处理程序中使用backtrace_symbols)有被破坏的危险。不要使用它-是的,backtrace和backtrace_symbols会生成回溯并将其转换为符号名称,但是:backtrac

c++ - 在 GCC 上的 GTEST 中测试失败时是否有打印堆栈跟踪的选项?

我在Linux上将GTEST与GCC结合使用。我想看到在测试失败时打印的堆栈跟踪(无论是断言还是基于信号的崩溃)。可以做到manually,但我想知道它是否可以设置为GTEST构建/运行选项(无需对我的代码库进行多行修改)? 最佳答案 没有“完全”记录的选项:--gtest_stack_trace_depth=10(10只是示例值)。必须与--gmock_verbose=info一起使用是的-它适用于失败的EXPECT_CALL-仅在gmock中。对于断言(如ASSERT_EQ),它的意义不大-因为ASSERT就在它所在的位置-它的